package day20170420.programmer.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import day20170420.programmer.dao.Company;
import day20170420.programmer.dao.Programmer;

public class BusinessDaoImpl extends BusinessAbstractDaoImpl {
	/**
	 * 1招聘一个程序员 增加
	 * 
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		程序员的对象
	 * @return 			返回结果
	 */
	public boolean programmerAdd(Company company, Programmer ps) {
		//调用父类的判断，如果存在返回true
		boolean result = super.programmerGudge(company, ps);
		if(result){
			System.out.println("用户已经存在,无法增加");
			return false;
		}
		//拿到容器
		List<Programmer> list = company.getList();
		//把这个对象装进容器
		list.add(ps);
		//增加成功
		return true;
	}
	
	/**
	 * 根据名字开除程序员
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		删除的条件
	 * @return			返回结果
	 */
	public boolean programmerDeleteByName(Company company,Programmer ps){
		//拿到名字
		String name = ps.getName();
		//判断传入的条件是否为空
		if(name == null){
			System.out.println("删除的名字不能为空...");
			return false;
		}
		//判断需要删除的程序是否存在
		boolean result = super.programmerGudge(company, ps);
		//如果不存在，无法删除
		if(!result){
			System.out.println("用户不已经存在,无法删除");
			return false;
		}
		//拿到容器
		List<Programmer> list = company.getList();
		//循环容器的下标
		for(int index=0; index<list.size(); index++){
			//拿到程序员的对象
			Programmer programmer = list.get(index);
			//获取对象中的名字
			String objectName = programmer.getName();
			//判断是否相同
			if(objectName.equals(name)){
				//如果相同就删除
				list.remove(index);
			}
		}
		return true;
	}
	
	/**
	 * 开除所有的男的程序员
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		删除的条件
	 * @return			返回结果
	 */
	public boolean programmerDeleteBySex(Company company,Programmer ps){
		//拿到性别判断是否为空
		Character sex = ps.getSex();
		if(sex == null){
			System.out.println("删除的性别不能为空...");
			return false;
		}
		//拿到容器
		List<Programmer> list = company.getList();
		//循环容器的下标
		for(int index=0; index<list.size(); index++){
			//永远判断第一个下标，否则删除后数组长度会--，导致有一些没有删除
			index = 0;
			//拿到程序员的对象
			Programmer programmer = list.get(index);
			//获取对象中的性别
			Character objectSex = programmer.getSex();
			//判断是否相同
			if(objectSex.equals(sex)){
				//如果相同就删除
				list.remove(index);
			}
		}
		return true;
	}
	
	/**
	 * 把所有的女程序员的工资增加1000块
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		条件
	 * @return 			返回结果
	 */
	public void programmerSalaryAdd(Company company, Programmer ps) {
		//拿到性别判断是否为空
		Character sex = ps.getSex();
		//拿到容器
		List<Programmer> list = company.getList();
		//循环容器的下标
		for(int index=0; index<list.size(); index++){
			//拿到程序员的对象
			Programmer programmer = list.get(index);
			//获取对象中的性别
			Character objectSex = programmer.getSex();
			Double objectSalary = programmer.getSalary();
			programmer.setSalary(objectSalary + 1000.00);
			//判断是否相同
			if(objectSex.equals(sex)){
				list.set(index, programmer);
			}
		}
	}
	
	/**
	 * 查询所有工资在10000以上的程序员
	 * 
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		条件
	 * @return 			返回结果
	 */
	public boolean programmerFindSalary(Company company, Programmer ps) {
		//拿到查询的工资
		Double salary = ps.getSalary();
		//如果工资为空，则不继续执行
		if(salary == null){
			System.out.println("输入的工资不能为空...");
			return false;
		}
		//拿到容器
		List<Programmer> list = company.getList();
		//定义一个新的容器
		List<Programmer> newList = new ArrayList<Programmer>();
		//超级循环
		for(Programmer programmer : list){
			//拿到对象中的工资
			Double objectSalary = programmer.getSalary();
			//如果当前工资大于条件
			if(objectSalary >= salary){
				//装到新的容器
				newList.add(programmer);
			}
		}
		System.out.println(newList);
		return false;
	}
	
	
	/**
	 * 查询所有工资在10000以上的程序员，级别改为中级程序员
	 * 
	 * @param company	传入公司拿到数组（相当于宠物商店）
	 * @param ps		条件
	 * @return 			返回结果
	 */
	public boolean programmerFindUpdateLevel(Company company, Programmer ps) {
		//拿到查询的工资和级别
		Double salary = ps.getSalary();
		String level = ps.getLevel();
		//如果工资为空，则不继续执行
		if(salary == null && level == null){
			System.out.println("输入的工资和级别不能为空...");
			return false;
		}
		//拿到容器
		List<Programmer> list = company.getList();
		//超级循环
		for(int index=0; index<list.size(); index++){
			//拿到当前这个对象
			Programmer programmer = list.get(index);
			//拿到对象中的工资
			Double objectSalary = programmer.getSalary();
			//如果当前工资大于条件
			if(objectSalary >= salary){
				//修改当前对象的级别
				programmer.setLevel(level);
				//装到新的容器
				list.set(index, programmer);
			}
		}
		System.out.println(list);
		return false;
	}
}
